import { ecs } from "../../../../core/ecs/ECS";

/**
 * 分数组件
 * 
 * 通用组件：可用于 Player，也可用于成就系统、排行榜等
 * 
 * @example
 * const player = ecs.getEntity(Player);
 * player.ScoreComponent.add(100);
 * console.log(`Score: ${player.ScoreComponent.value}`);
 */
@ecs.register('ScoreComponent')
export class ScoreComponent extends ecs.Comp {
    /** 当前分数 */
    public value: number = 0;
    
    /** 历史最高分 */
    public highScore: number = 0;
    
    /**
     * 重置组件数据
     */
    reset(): void {
        this.value = 0;
        // 注意：highScore 通常不重置（保留历史记录）
        // 如果需要重置，取消注释下面这行
        // this.highScore = 0;
    }
    
    /**
     * 增加分数
     */
    add(points: number): void {
        if (points < 0) {
            console.warn('Score points cannot be negative, use subtract() instead');
            return;
        }
        
        this.value += points;
        
        // 更新最高分
        if (this.value > this.highScore) {
            this.highScore = this.value;
        }
    }
    
    /**
     * 减少分数
     */
    subtract(points: number): void {
        if (points < 0) {
            console.warn('Score points cannot be negative');
            return;
        }
        
        this.value = Math.max(0, this.value - points);
    }
    
    /**
     * 设置分数
     */
    setValue(value: number): void {
        this.value = Math.max(0, value);
        
        if (this.value > this.highScore) {
            this.highScore = this.value;
        }
    }
    
    /**
     * 重置当前分数（但保留历史最高分）
     */
    resetCurrent(): void {
        this.value = 0;
    }
    
    /**
     * 重置所有分数（包括历史最高分）
     */
    resetAll(): void {
        this.value = 0;
        this.highScore = 0;
    }
    
    /**
     * 是否创造了新纪录
     */
    isNewRecord(): boolean {
        return this.value === this.highScore && this.value > 0;
    }
}

